package fr.upmc.cie.data.interfaces;

import java.util.ArrayList;

import fr.upmc.cie.data.CategorieItem;
import fr.upmc.cie.data.exception.CategorieNameDuplicateException;
import fr.upmc.cie.data.exception.CategorieNotExistException;

public interface ICategorieDataSource {
	
	/**
	 * Ajouter une nouvelle categorie
	 * @param ci
	 * @throws CategorieNameDuplicateException
	 */
	public void insert(CategorieItem ci) throws CategorieNameDuplicateException;
	
	/**
	 * Supprimer une categorie
	 * @param ci
	 * @throws CategorieNotExistException
	 */
	public void delete(CategorieItem ci) throws CategorieNotExistException;

	/**
	 * Mettre a jour une categorie
	 * @param ci
	 * @throws CategorieNameDuplicateException
	 * @throws CategorieNotExistException
	 */
	public void update(CategorieItem ci) throws CategorieNameDuplicateException,CategorieNotExistException;
	
	/**
	 * Renvoie tous les categories
	 * @return
	 */
	public ArrayList<CategorieItem> getAllCategories();
	
	/**
	 * Renvoie une categorie a partir de son id
	 * @param id
	 * @return
	 * @throws CategorieNotExistException
	 */
	public CategorieItem getCategorieById(Long id) throws CategorieNotExistException;
	
	/**
	 * Renvoie une categorie a partir de son nom
	 * @param name
	 * @return
	 * @throws CategorieNotExistException
	 */
	public CategorieItem getCategorieByName(String name) throws CategorieNotExistException;
}
